// NewDocDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Vincent.h"
#include "NewDocDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CNewDocDlg dialog


CNewDocDlg::CNewDocDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNewDocDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CNewDocDlg)
	m_nWidth = 0;
	m_nHeight = 0;
	//}}AFX_DATA_INIT
	
	m_colorForeground = RGB(0,0,0);			// 검은색
	m_colorBackground = RGB(255,255,255);	// 흰색
}


void CNewDocDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNewDocDlg)
	DDX_Text(pDX, IDC_EDIT_WIDTH, m_nWidth);
	DDV_MinMaxInt(pDX, m_nWidth, 1, 1280);
	DDX_Text(pDX, IDC_EDIT_HEIGHT, m_nHeight);
	DDV_MinMaxInt(pDX, m_nHeight, 1, 1024);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNewDocDlg, CDialog)
	//{{AFX_MSG_MAP(CNewDocDlg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_SETCOLOR_FOREGROUND, OnSetcolorForeground)
	ON_BN_CLICKED(IDC_SETCOLOR_BACKGROUND, OnSetcolorBackground)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNewDocDlg message handlers

void CNewDocDlg::OnOK() 
{
	UpdateData(TRUE);	// 컨트롤 -> 변수
	
	// 입력한 숫자가 허용범위에 있는지 체크.
	// 숫자를 바꾸려면, 리소스에디터에서 설정해놓은 값이랑 같이 바꿔야 한다!!
	if (m_nHeight <= 0 || m_nHeight > 1024 || m_nWidth <= 0 || m_nWidth > 1280)
		return;
	
	// 도큐먼트에 접근해서, OnResetDocument()를 호출한다.
	// OnResetDocument()에서는 매개변수를 멤버변수에 넣고, 내부에서 OnNewDocument()를 호출.
	((CVincentDoc*)((CFrameWnd*)AfxGetMainWnd())->GetActiveDocument())->
		OnResetDocument(CSize(m_nWidth, m_nHeight), m_colorForeground, m_colorBackground);
	
	CDialog::OnOK();
}

void CNewDocDlg::OnCancel() 
{
	// 그냥 닫는다.
	CDialog::OnCancel();
}

void CNewDocDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// 전경색/배경색 이미지 컨트롤을 불러온다.
	CDC* pForeDC = this->GetDlgItem(IDC_SETCOLOR_FOREGROUND)->GetDC();
	CDC* pBackDC = this->GetDlgItem(IDC_SETCOLOR_BACKGROUND)->GetDC();
	
	CRect rt;
	this->GetDlgItem(IDC_SETCOLOR_FOREGROUND)->GetClientRect(&rt);
	
	// 테두리를 1씩 줄인다. (컨트롤의 프레임은 색칠 안하기 위해서)
	rt.left += 1;
	rt.top += 1;
	rt.bottom -= 1;
	rt.right -= 1;
	
	// 멤버변수에서 색상을 가져온다.
	CBrush brushForeground(m_colorForeground);
	CBrush brushBackground(m_colorBackground);
	
	// 테두리를 1씩 뺀 상태에서 색칠한다. (결국 내용만 색칠하게 됨)
	pForeDC->FillRect(&rt, &brushForeground);
	pBackDC->FillRect(&rt, &brushBackground);
}

void CNewDocDlg::OnSetcolorForeground() 
{
	// 색상 선택 다이얼로그에서 색깔을 받아서 전경색을 설정한다.
	CColorDialog dlg(m_colorForeground);
	if (dlg.DoModal() == IDOK)
		m_colorForeground = dlg.GetColor();
	
	Invalidate(TRUE);	// 다시 그린다.
}

void CNewDocDlg::OnSetcolorBackground() 
{
	// 색상 선택 다이얼로그에서 색깔을 받아서 배경색을 설정한다.
	CColorDialog dlg(m_colorBackground);
	if (dlg.DoModal() == IDOK)
		m_colorBackground = dlg.GetColor();
	
	Invalidate(TRUE);	// 다시 그린다.
}
